package model

import (
	"ginblog/utils/errmsg"

	"gorm.io/gorm"
)

// Category 文章分类表
type Category struct {
	ID   uint   `gorm:"primary_key;auto_increment" json:"id"`
	Name string `gorm:"type:varchar(20);not null" json:"name"`
}

// CheckCategoryExist 查询分类是否已存在
func CheckCategoryExist(catename string) (code int) {
	var cate Category
	db.Select("id").Where("name = ?", catename).First(&cate)
	if cate.ID > 0 {
		return errmsg.ERROR_CATENAME_USED // 3001
	}
	return errmsg.SUCCESS // 200
}

// CreateCategory 新增分类
func CreateCategory(data *Category) (code int) {
	// data.Password = encrypt.EncryptPassword(data.Password)
	err := db.Create(&data).Error
	if err != nil {
		return errmsg.ERROR_CATEGORY_NOT_EXITS // 3002
	}
	return errmsg.SUCCESS
}

// todo 查询分类下的所有文章

// GetCategory 查询单个分类信息
func GetCategory(id int) ([]Category, int) {
	var cate []Category
	err = db.Where("id = ?", id).First(&cate).Error
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, errmsg.ERROR
	}
	return cate, errmsg.SUCCESS
}

// GetCategorys 查询分类列表
func GetCategorys(pageSize int, pageNum int) ([]Category, int64) {
	var cates []Category
	var total int64
	err = db.Find(&cates).Count(&total).Limit(pageSize).Offset((pageNum - 1) * pageSize).Error
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, 0
	}
	return cates, total
}

// EditCategory 编辑分类信息 只可修改密码以外的字段
func EditCategory(id int, data *Category) int {
	var cate Category

	var maps = make(map[string]interface{})
	maps["name"] = data.Name

	err = db.Model(&cate).Where("id = ?", id).Updates(maps).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCCESS
}

// DeleteCategory 删除分类的方法
func DeleteCategory(id int) int {
	err = db.Where("id = ?", id).Delete(&Category{}).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCCESS
}
